// class Solution {
// public:
//     string multiply(string num1, string num2) {
//         if (num1 == "0" || num2 == "0") {
//             return "0"; // 如果其中一个数是0，则乘积也是0
//         }
//         reverse(num1.begin(), num1.end()); //
//         反转字符串，方便从最低位开始计算 reverse(num2.begin(), num2.end());

//         vector<int> v(num1.size() + num2.size(), 0); // 初始化结果数组

//         for (int i = 0; i < num1.size(); i++) {
//             for (int j = 0; j < num2.size(); j++) {
//                 int ret = (num1[i] - '0') * (num2[j] - '0') + v[i + j]; //
//                 计算当前位的乘积和累加值 v[i + j] = ret % 10; // 当前位的值
//                 v[i + j + 1] += ret / 10; // 进位加到下一位
//             }
//         }

//         string res;
//         for (auto e : v) {
//             res += (e + '0'); // 将结果数组转换为字符串
//         }

//         // 去掉末尾多余的零
//         while (res.back() == '0') {
//             res.pop_back();
//         }

//         reverse(res.begin(), res.end()); // 反转结果字符串
//         return res;
//     }
// };

// 无进位相加
class Solution {
public:
    string multiply(string num1, string num2) {
        if (num1 == "0" || num2 == "0") {
            return "0"; // 如果其中一个数是0，则乘积也是0
        }
        reverse(num1.begin(), num1.end()); // 反转字符串，方便从最低位开始计算
        reverse(num2.begin(), num2.end());

        vector<int> v(num1.size() + num2.size(), 0); // 初始化结果数组

        for (int i = 0; i < num1.size(); i++) {
            for (int j = 0; j < num2.size(); j++) {
                v[i + j] += (num1[i] - '0') * (num2[j] - '0');
            }
        }

        int cur = 0, t = 0;
        string ret;
        while (cur < num1.size() + num2.size() -1|| t) {
            if (cur < num1.size() + num2.size()-1)
                t += v[cur++];
            ret += t % 10 + '0';
            t /= 10;
        }

        while (ret.size() > 1 && ret.back() == '0')
            ret.pop_back();
        reverse(ret.begin(), ret.end());
        return ret;
    }
};